package com.party.api.service.wechatPlatform;

import com.party.api.dto.wechatPlatform.requst.RefreshAuthorizerTokenRequest;
import com.party.api.dto.wechatPlatform.response.Oauth2AccessTokenResponse;
import com.party.api.dto.wechatPlatform.response.RefreshAuthorizerTokenResponse;
import com.party.api.dto.wechatPlatform.response.WechatAuthorizerInfoResponse;
import com.party.api.dto.wechatPlatform.response.WechatAuthorizerUserInfoResponse;

import java.io.UnsupportedEncodingException;

/**
 * 微信开放平台接口
 * Created by wei.li
 *
 * @date 2017/8/26 0026
 * @time 10:11
 */
public interface IWechatPlatformService {


    /**
     * 获取第三方平台component_access_token
     * @param appid 第三方平台appid
     * @param appsecret 第三方平台appsecret
     * @param verifyTicket 微信后台推送的ticket，此ticket会定时推送
     * @return 第三方平台access_token
     */
    String getAccessToken(String appid, String appsecret, String verifyTicket);


    /**
     * 获取预授权码
     * @param appid 第三方平台方appid
     * @param accessToken 第三方平台access_token
     * @return 预授权码
     */
    String getPreAuthCode(String appid, String accessToken);

    /**
     * 获取用户授权url
     * @param redirectUrl 重定向地址
     * @param componentAppid 第三方平台appid
     * @param authCode 预授权码
     * @return 授权url
     * @throws UnsupportedEncodingException
     */
    String getAuthorizeUrl(String redirectUrl, String componentAppid, String authCode)
            throws UnsupportedEncodingException;


    /**
     * 获取授权信息
     * @param componentAppid 第三方平台appid
     * @param componentAccessToken 第三方平台access_token
     * @param authorizationCode 授权code
     * @return 授权信息
     */
    WechatAuthorizerInfoResponse getAuthorizationInfo(String componentAppid,
                                                      String componentAccessToken, String authorizationCode);

    /**
     * 授权方令牌
     * @param request 请求参数
     * @param componentAccessToken 第三方平台令牌
     * @return 响应参数
     */
    RefreshAuthorizerTokenResponse refreshAuthorizerToken(RefreshAuthorizerTokenRequest request,
                                                          String componentAccessToken);

    /**
     * 获取授权令牌
     * @param appId 公众号 appid
     * @param code 授权码
     * @param componentAppid 开放平台 appid
     * @param componentAccessToken 开放平台 交互令牌
     * @return
     */
    Oauth2AccessTokenResponse getOauth2AccessToken(String appId, String code,
                                                   String componentAppid, String componentAccessToken);

    /**
     * 获取授权方的帐号基本信息
     * @param componentAppid 服务appid
     * @param authorizerAppid 授权方appid
     * @param componentAccessToken 第三方平台access_token
     * @return  授权方基本信息
     */
    WechatAuthorizerUserInfoResponse getAuthorizerInfo(String componentAppid,
                                                       String authorizerAppid, String componentAccessToken);
}
